package com.weijian.demo1.controller;

import com.weijian.demo1.entity.User;
import com.weijian.demo1.service.UserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 用户管理控制器
 * 提供用户注册、登录、查询等相关API接口
 */
@RestController
@RequestMapping("/api/users")
@CrossOrigin(origins = "*")
@Tag(name = "用户管理", description = "提供用户注册、登录、查询等相关API接口")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 用户注册接口
     * @param user 用户注册信息（用户名、密码、邮箱等）
     * @return 创建成功的用户对象，包含用户ID
     * @apiNote 密码会以加密形式存储
     */
    @PostMapping("/register")
    @Operation(summary = "用户注册", description = "注册新用户，密码会以加密形式存储")
    public User register(@RequestBody @Parameter(description = "用户注册信息") User user) {
        return userService.register(user);
    }

    /**
     * 用户登录接口
     * @param user 登录信息（用户名和密码）
     * @return 登录成功的用户对象，包含完整用户信息
     * @apiNote 密码验证通过后返回用户信息，失败会抛出异常
     */
    @PostMapping("/login")
    @Operation(summary = "用户登录", description = "用户登录验证，密码验证通过后返回用户信息，失败会抛出异常")
    public User login(@RequestBody @Parameter(description = "登录信息") User user) {
        return userService.login(user.getUsername(), user.getPassword());
    }

    /**
     * 根据用户ID获取用户信息
     * @param id 用户ID
     * @return 用户详细信息
     * @apiNote 返回的用户对象不包含密码信息
     */
    @GetMapping("/{id}")
    @Operation(summary = "获取用户信息", description = "根据用户ID获取用户详细信息，返回的用户对象不包含密码信息")
    public User getUser(@PathVariable @Parameter(description = "用户ID") Long id) {
        return userService.getUserById(id);
    }
}